컨ν μ΄λ λ΄ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ μ΅μ ννμΈμ. μ€μ©μ μΈ νλ κΈ°μ λ‘ μ±λ₯κ³Ό ν¨μ¨μ±μ ν₯μμν€λ λ°©λ²μ μμ보μΈμ.
μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½ μ΅μ ν: 컨ν μ΄λ μ±λ₯ νλ
컨ν μ΄λλ μννΈμ¨μ΄ κ°λ°μ νλͺ μ κ°μ ΈμμΌλ©°, μ ν리μΌμ΄μ μ λΉλ, ν μ€νΈ, λ°°ν¬νκΈ° μν μΌκ΄λκ³ κ²©λ¦¬λ νκ²½μ μ 곡ν©λλ€. μ΄λ μμ‘΄μ± κ΄λ¦¬μ νκ²½ λΆμΌμΉκ° ν° λ¬Έμ κ° λ μ μλ μλ°μ€ν¬λ¦½νΈ κ°λ°μμ νΉν κ·Έλ μ΅λλ€. κ·Έλ¬λ 컨ν μ΄λ λ΄λΆμμ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ μ€ννλ κ²μ΄ νμ μ¦κ°μ μΈ μ±λ₯ ν₯μμΌλ‘ μ΄μ΄μ§λ κ²μ μλλλ€. μ μ ν νλ μμ΄λ 컨ν μ΄λκ° λλλ‘ μ€λ²ν€λλ₯Ό μ λ°νκ³ μμ νλ¦μ λ¦μΆ μ μμ΅λλ€. μ΄ κΈμμλ 컨ν μ΄λ λ΄ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ μ΅μ ννμ¬ μ΅κ³ μ μ±λ₯κ³Ό ν¨μ¨μ±μ λ¬μ±νλ λ°©λ²μ μλ΄ν©λλ€.
μ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ 컨ν μ΄λνν΄μΌ νλκ°?
μ΅μ νμ λν΄ μμ보기 μ μ, μλ°μ€ν¬λ¦½νΈ κ°λ°μ 컨ν μ΄λλ₯Ό μ¬μ©νλ μ£Όμ μ΄μ μ μμ½ν΄ λ³΄κ² μ΅λλ€:
- μΌκ΄μ±: νμ λͺ¨λ ꡬμ±μμ΄ λμΌν νκ²½μ μ¬μ©νλλ‘ λ³΄μ₯νμ¬ "λ΄ μ»΄ν¨ν°μμλ λλλ°"μ κ°μ λ¬Έμ λ₯Ό μ κ±°ν©λλ€. μ¬κΈ°μλ Node.js λ²μ , npm/yarn λ²μ , μ΄μ 체μ μ’ μμ± λ±μ΄ ν¬ν¨λ©λλ€.
- 격리: μλ‘ λ€λ₯Έ νλ‘μ νΈμ κ·Έ μμ‘΄μ± κ°μ μΆ©λμ λ°©μ§ν©λλ€. μλ‘ λ€λ₯Έ Node.js λ²μ μ κ°μ§ μ¬λ¬ νλ‘μ νΈλ₯Ό κ°μ μμ΄ λμμ μ€νν μ μμ΅λλ€.
- μ¬νμ±: μ΄λ€ κΈ°κ³μμλ κ°λ° νκ²½μ μ½κ² μ¬νν μ μμ΄ μ¨λ³΄λ© λ° λ¬Έμ ν΄κ²°μ λ¨μνν©λλ€.
- μ΄μμ±: λ‘컬 λ¨Έμ , ν΄λΌμ°λ μλ², CI/CD νμ΄νλΌμΈ λ± λ€μν νλ«νΌ κ°μ κ°λ° νκ²½μ μννκ² μ΄λν μ μμ΅λλ€.
- νμ₯μ±: μΏ λ²λ€ν°μ€μ κ°μ 컨ν μ΄λ μ€μΌμ€νΈλ μ΄μ νλ«νΌκ³Ό μ ν΅ν©λμ΄ νμμ λ°λΌ κ°λ° νκ²½μ νμ₯ν μ μμ΅λλ€.
컨ν μ΄λνλ μλ°μ€ν¬λ¦½νΈ κ°λ°μ μΌλ°μ μΈ μ±λ₯ λ³λͺ© νμ
μ΄λ¬ν μ₯μ μλ λΆκ΅¬νκ³ , 컨ν μ΄λνλ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μμλ μ¬λ¬ μμΈμ΄ μ±λ₯ λ³λͺ© νμμ μ λ°ν μ μμ΅λλ€:
- 리μμ€ μ μ½: 컨ν μ΄λλ νΈμ€νΈ λ¨Έμ μ 리μμ€(CPU, λ©λͺ¨λ¦¬, λμ€ν¬ I/O)λ₯Ό 곡μ ν©λλ€. μ λλ‘ κ΅¬μ±λμ§ μμΌλ©΄ 컨ν μ΄λμ 리μμ€ ν λΉμ΄ μ νλμ΄ μλ μ νκ° λ°μν μ μμ΅λλ€.
- νμΌ μμ€ν μ±λ₯: 컨ν μ΄λ λ΄μμ νμΌμ μ½κ³ μ°λ κ²μ νΈμ€νΈ λ¨Έμ μμλ³΄λ€ λ릴 μ μμΌλ©°, νΉν λ§μ΄νΈλ λ³Όλ₯¨μ μ¬μ©ν λ κ·Έλ μ΅λλ€.
- λ€νΈμν¬ μ€λ²ν€λ: 컨ν μ΄λμ νΈμ€νΈ λ¨Έμ λλ λ€λ₯Έ 컨ν μ΄λ κ°μ λ€νΈμν¬ ν΅μ μ μ§μ° μκ°μ μ λ°ν μ μμ΅λλ€.
- λΉν¨μ¨μ μΈ μ΄λ―Έμ§ λ μ΄μ΄: μλͺ» ꡬ쑰νλ λ컀 μ΄λ―Έμ§λ ν° μ΄λ―Έμ§ ν¬κΈ°μ λλ¦° λΉλ μκ°μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- CPU μ§μ½μ μμ : Babelμ μ¬μ©ν νΈλμ€νμΌλ§, μ΅μν(minification), 볡μ‘ν λΉλ νλ‘μΈμ€λ CPUλ₯Ό λ§μ΄ μ¬μ©νλ©° μ 체 컨ν μ΄λ νλ‘μΈμ€λ₯Ό λλ¦¬κ² ν μ μμ΅λλ€.
μλ°μ€ν¬λ¦½νΈ κ°λ° 컨ν μ΄λλ₯Ό μν μ΅μ ν κΈ°λ²
1. 리μμ€ ν λΉ λ° μ ν
컨ν μ΄λμ 리μμ€λ₯Ό μ μ νκ² ν λΉνλ κ²μ μ±λ₯μ λ§€μ° μ€μν©λλ€. Docker Composeλ `docker run` λͺ λ Ήμ μ¬μ©νμ¬ λ¦¬μμ€ ν λΉμ μ μ΄ν μ μμ΅λλ€. λ€μ μμλ€μ κ³ λ €νμΈμ:
- CPU μ ν: `--cpus` νλκ·Έλ Docker Composeμ `cpus` μ΅μ μ μ¬μ©νμ¬ μ»¨ν μ΄λκ° μ¬μ©ν μ μλ CPU μ½μ΄ μλ₯Ό μ ννμΈμ. CPU 리μμ€λ₯Ό κ³Όλνκ² ν λΉνλ©΄ νΈμ€νΈ λ¨Έμ μ λ€λ₯Έ νλ‘μΈμ€μ κ²½ν©μ΄ λ°μν μ μμΌλ―λ‘ νΌν΄μΌ ν©λλ€. μμ λΆνμ λ§λ μ μ ν κ· νμ μ°ΎκΈ° μν΄ μ€νν΄ λ³΄μΈμ. μμ: `--cpus="2"` λλ `cpus: 2`
- λ©λͺ¨λ¦¬ μ ν: `--memory` λλ `-m` νλκ·Έ(μ: `--memory="2g"`)λ Docker Composeμ `mem_limit` μ΅μ (μ: `mem_limit: 2g`)μ μ¬μ©νμ¬ λ©λͺ¨λ¦¬ μ νμ μ€μ νμΈμ. 컨ν μ΄λκ° μ€μν(swapping)μ νΌν μ μλλ‘ μΆ©λΆν λ©λͺ¨λ¦¬λ₯Ό ν보ν΄μΌ ν©λλ€. μ€μνμ μ±λ₯μ ν¬κ² μ νμν¬ μ μμ΅λλ€. μ’μ μμμ μ μ ν리μΌμ΄μ μ΄ μΌλ°μ μΌλ‘ μ¬μ©νλ κ²λ³΄λ€ μ½κ° λ λ§μ λ©λͺ¨λ¦¬λ₯Ό ν λΉνλ κ²μ λλ€.
- CPU μ νΈλ(Affinity): `--cpuset-cpus` νλκ·Έλ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λλ₯Ό νΉμ CPU μ½μ΄μ κ³ μ νμΈμ. μ΄λ 컨ν μ€νΈ μ€μμΉμ μ€μ΄κ³ μΊμ μ§μμ±μ ν₯μμμΌ μ±λ₯μ κ°μ ν μ μμ΅λλ€. μ΄ μ΅μ μ 컨ν μ΄λκ° μ¬μ© κ°λ₯ν 리μμ€λ₯Ό νμ©νλ λ₯λ ₯μ μ νν μλ μμΌλ―λ‘ μ μ€νκ² μ¬μ©ν΄μΌ ν©λλ€. μμ: `--cpuset-cpus="0,1"`.
μμ (Docker Compose):
version: "3.8"
services:
web:
image: node:16
ports:
- "3000:3000"
volumes:
- .:/app
working_dir: /app
command: npm start
deploy:
resources:
limits:
cpus: '2'
memory: 2g
2. νμΌ μμ€ν μ±λ₯ μ΅μ ν
νμΌ μμ€ν μ±λ₯μ 컨ν μ΄λνλ κ°λ° νκ²½μμ μ’ μ’ μ£Όμ λ³λͺ© μ§μ μ λλ€. μ΄λ₯Ό κ°μ νκΈ° μν λͺ κ°μ§ κΈ°λ²μ λ€μκ³Ό κ°μ΅λλ€:
- λ€μλ λ³Όλ₯¨ μ¬μ©: λ°μΈλ λ§μ΄νΈ(νΈμ€νΈμμ μ§μ λλ ν°λ¦¬ λ§μ΄νΈ) λμ λ€μλ λ³Όλ₯¨μ μ¬μ©νμΈμ. λ€μλ λ³Όλ₯¨μ λ컀μ μν΄ κ΄λ¦¬λλ©° λ λμ μ±λ₯μ μ 곡ν μ μμ΅λλ€. λ°μΈλ λ§μ΄νΈλ νΈμ€νΈμ 컨ν μ΄λ κ°μ νμΌ μμ€ν λ³νμΌλ‘ μΈν΄ μ±λ₯ μ€λ²ν€λκ° λ°μνλ κ²½μ°κ° λ§μ΅λλ€.
- Docker Desktop μ±λ₯ μ€μ : Docker Desktop(macOS λλ Windows)μ μ¬μ©νλ κ²½μ° νμΌ κ³΅μ μ€μ μ μ‘°μ νμΈμ. Docker Desktopμ κ°μ λ¨Έμ μ μ¬μ©νμ¬ μ»¨ν μ΄λλ₯Ό μ€ννλ©°, νΈμ€νΈμ VM κ°μ νμΌ κ³΅μ κ° λ릴 μ μμ΅λλ€. λ€μν νμΌ κ³΅μ νλ‘ν μ½(μ: gRPC FUSE, VirtioFS)μ μ€ννκ³ VMμ ν λΉλ 리μμ€λ₯Ό λλ €λ³΄μΈμ.
- Mutagen (macOS/Windows): macOS λ° Windowsμμ νΈμ€νΈμ λ컀 컨ν μ΄λ κ°μ νμΌ μμ€ν μ±λ₯μ κ°μ νκΈ° μν΄ νΉλ³ν μ€κ³λ νμΌ λκΈ°ν λκ΅¬μΈ Mutagen μ¬μ©μ κ³ λ €ν΄ λ³΄μΈμ. Mutagenμ λ°±κ·ΈλΌμ΄λμμ νμΌμ λκΈ°ννμ¬ κ±°μ λ€μ΄ν°λΈμ κ°κΉμ΄ μ±λ₯μ μ 곡ν©λλ€.
- tmpfs λ§μ΄νΈ: μꡬμ μΌλ‘ 보쑴ν νμκ° μλ μμ νμΌμ΄λ λλ ν°λ¦¬μλ `tmpfs` λ§μ΄νΈλ₯Ό μ¬μ©νμΈμ. `tmpfs` λ§μ΄νΈλ νμΌμ λ©λͺ¨λ¦¬μ μ μ₯νμ¬ λ§€μ° λΉ λ₯Έ μ κ·Ό μλλ₯Ό μ 곡ν©λλ€. μ΄λ `node_modules`λ λΉλ κ²°κ³Όλ¬Όμ νΉν μ μ©ν©λλ€. μμ: `volumes: - myvolume:/path/in/container:tmpfs`.
- κ³Όλν νμΌ I/O νΌνκΈ°: 컨ν μ΄λ λ΄μμ μνλλ νμΌ I/O μμ μ΅μννμΈμ. μ¬κΈ°μλ λμ€ν¬μ μ°λ νμΌ μ μ€μ΄κΈ°, νμΌ ν¬κΈ° μ΅μ ν, μΊμ± μ¬μ© λ±μ΄ ν¬ν¨λ©λλ€.
μμ (λ€μλ λ³Όλ₯¨μ μ¬μ©ν Docker Compose):
version: "3.8"
services:
web:
image: node:16
ports:
- "3000:3000"
volumes:
- app_data:/app
working_dir: /app
command: npm start
volumes:
app_data:
μμ (Mutagenμ μ¬μ©ν Docker Compose - Mutagen μ€μΉ λ° κ΅¬μ± νμ):
version: "3.8"
services:
web:
image: node:16
ports:
- "3000:3000"
volumes:
- mutagen:/app
working_dir: /app
command: npm start
volumes:
mutagen:
driver: mutagen
3. λ컀 μ΄λ―Έμ§ ν¬κΈ° λ° λΉλ μκ° μ΅μ ν
ν° λ컀 μ΄λ―Έμ§λ λλ¦° λΉλ μκ°, μ¦κ°λ μ μ₯ λΉμ©, λλ¦° λ°°ν¬ μκ°μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ΅μννκ³ λΉλ μκ°μ κ°μ νκΈ° μν λͺ κ°μ§ κΈ°λ²μ λ€μκ³Ό κ°μ΅λλ€:
- Multi-Stage Builds: Multi-stage buildsλ₯Ό μ¬μ©νμ¬ λΉλ νκ²½κ³Ό λ°νμ νκ²½μ λΆλ¦¬νμΈμ. μ΄λ₯Ό ν΅ν΄ λΉλ λꡬμ μ’ μμ±μ μ΅μ’ μ΄λ―Έμ§μ ν¬ν¨μν€μ§ μκ³ λΉλ λ¨κ³μλ§ ν¬ν¨μν¬ μ μμ΅λλ€. μ΄λ μ΅μ’ μ΄λ―Έμ§μ ν¬κΈ°λ₯Ό κ·Ήμ μΌλ‘ μ€μ¬μ€λλ€.
- μ΅μ κΈ°λ³Έ μ΄λ―Έμ§ μ¬μ©: 컨ν μ΄λμ μ΅μνμ κΈ°λ³Έ μ΄λ―Έμ§λ₯Ό μ ννμΈμ. Node.js μ ν리μΌμ΄μ μ κ²½μ°, νμ€ `node` μ΄λ―Έμ§λ³΄λ€ ν¨μ¬ μμ `node:alpine` μ΄λ―Έμ§ μ¬μ©μ κ³ λ €ν΄ λ³΄μΈμ. Alpine Linuxλ μμ μ€μΉ 곡κ°μ κ°μ§ κ²½λ λ°°ν¬νμ λλ€.
- λ μ΄μ΄ μμ μ΅μ ν: λ컀μ λ μ΄μ΄ μΊμ±μ νμ©νλλ‘ Dockerfile λͺ λ Ή μμλ₯Ό μ λ ¬νμΈμ. μμ£Ό λ³κ²½λλ λͺ λ Ή(μ: μ ν리μΌμ΄μ μ½λ 볡μ¬)μ Dockerfileμ λ λΆλΆμ λ°°μΉνκ³ , λ μμ£Ό λ³κ²½λλ λͺ λ Ή(μ: μμ€ν μ’ μμ± μ€μΉ)μ μμ λΆλΆμ λ°°μΉνμΈμ. μ΄λ₯Ό ν΅ν΄ λμ»€κ° μΊμλ λ μ΄μ΄λ₯Ό μ¬μ¬μ©νμ¬ νμ λΉλ μλλ₯Ό ν¬κ² λμΌ μ μμ΅λλ€.
- λΆνμν νμΌ μ 리: λ μ΄μ νμνμ§ μμ νμΌμ μ΄λ―Έμ§μμ μ κ±°νμΈμ. μ¬κΈ°μλ μμ νμΌ, λΉλ κ²°κ³Όλ¬Ό, λ¬Έμ λ±μ΄ ν¬ν¨λ©λλ€. `rm` λͺ λ Ήμ΄λ multi-stage buildsλ₯Ό μ¬μ©νμ¬ μ΄λ¬ν νμΌμ μ κ±°νμΈμ.
- `.dockerignore` μ¬μ©: `.dockerignore` νμΌμ λ§λ€μ΄ λΆνμν νμΌκ³Ό λλ ν°λ¦¬κ° μ΄λ―Έμ§μ 볡μ¬λμ§ μλλ‘ μ μΈνμΈμ. μ΄λ μ΄λ―Έμ§ ν¬κΈ°μ λΉλ μκ°μ ν¬κ² μ€μΌ μ μμ΅λλ€. `node_modules`, `.git` λ° κΈ°ν ν¬κ±°λ κ΄λ ¨ μλ νμΌμ μ μΈνμΈμ.
μμ (Multi-Stage Buildλ₯Ό μ¬μ©ν Dockerfile):
# 1λ¨κ³: μ ν리μΌμ΄μ
λΉλ
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 2λ¨κ³: λ°νμ μ΄λ―Έμ§ μμ±
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/dist . # λΉλλ κ²°κ³Όλ¬Όλ§ λ³΅μ¬
COPY package*.json ./
RUN npm install --production # νλ‘λμ
μ’
μμ±λ§ μ€μΉ
CMD ["npm", "start"]
4. Node.js νΉμ μ΅μ ν
Node.js μ ν리μΌμ΄μ μ체λ₯Ό μ΅μ ννλ κ²λ 컨ν μ΄λ λ΄ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€:
- νλ‘λμ λͺ¨λ μ¬μ©: `NODE_ENV` νκ²½ λ³μλ₯Ό `production`μΌλ‘ μ€μ νμ¬ Node.js μ ν리μΌμ΄μ μ νλ‘λμ λͺ¨λμμ μ€ννμΈμ. μ΄λ κ² νλ©΄ λλ²κΉ λ° ν« λ¦¬λ‘λ©κ³Ό κ°μ κ°λ° μκ° κΈ°λ₯μ΄ λΉνμ±νλμ΄ μ±λ₯μ΄ ν₯μλ μ μμ΅λλ€.
- μ’ μμ± μ΅μ ν: `npm prune --production` λλ `yarn install --production`μ μ¬μ©νμ¬ νλ‘λμ μ νμν μ’ μμ±λ§ μ€μΉνμΈμ. κ°λ° μ’ μμ±μ `node_modules` λλ ν°λ¦¬μ ν¬κΈ°λ₯Ό ν¬κ² λ릴 μ μμ΅λλ€.
- μ½λ λΆν (Code Splitting): μ½λ λΆν μ ꡬννμ¬ μ ν리μΌμ΄μ μ μ΄κΈ° λ‘λ μκ°μ μ€μ΄μΈμ. Webpackμ΄λ Parcelκ³Ό κ°μ λꡬλ μ½λλ₯Ό νμμ λ°λΌ λ‘λλλ λ μμ μ²ν¬λ‘ μλ λΆν ν μ μμ΅λλ€.
- μΊμ±: μΊμ± λ©μ»€λμ¦μ ꡬννμ¬ μλ²μ λν μμ² μλ₯Ό μ€μ΄μΈμ. μ΄λ μΈλ©λͺ¨λ¦¬ μΊμ, Redisλ Memcachedμ κ°μ μΈλΆ μΊμ λλ λΈλΌμ°μ μΊμ±μ μ¬μ©νμ¬ μνν μ μμ΅λλ€.
- νλ‘νμΌλ§: νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μ½λμ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ. Node.jsλ λλ¦¬κ² μ€νλλ ν¨μλ₯Ό μ°Ύμλ΄κ³ μ½λλ₯Ό μ΅μ ννλ λ° λμμ΄ λλ λ΄μ₯ νλ‘νμΌλ§ λꡬλ₯Ό μ 곡ν©λλ€.
- μ¬λ°λ₯Έ Node.js λ²μ μ ν: μ΅μ λ²μ μ Node.jsλ μ’ μ’ μ±λ₯ κ°μ λ° μ΅μ νλ₯Ό ν¬ν¨ν©λλ€. μ κΈ°μ μΌλ‘ μ΅μ μμ λ²μ μΌλ‘ μ λ°μ΄νΈνμΈμ.
μμ (Docker Composeμμ NODE_ENV μ€μ ):
version: "3.8"
services:
web:
image: node:16
ports:
- "3000:3000"
volumes:
- .:/app
working_dir: /app
command: npm start
environment:
NODE_ENV: production
5. λ€νΈμν¬ μ΅μ ν
컨ν μ΄λμ νΈμ€νΈ λ¨Έμ κ°μ λ€νΈμν¬ ν΅μ λ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ΅μ ν κΈ°λ²μ λλ€:
- νΈμ€νΈ λ€νΈμνΉ μ¬μ©(μ£Όμ): κ²½μ°μ λ°λΌ `--network="host"` μ΅μ μ μ¬μ©νλ©΄ λ€νΈμν¬ κ°μν μ€λ²ν€λλ₯Ό μ κ±°νμ¬ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. κ·Έλ¬λ μ΄λ 컨ν μ΄λμ ν¬νΈλ₯Ό νΈμ€νΈ λ¨Έμ μ μ§μ λ ΈμΆμμΌ λ³΄μ μνκ³Ό ν¬νΈ μΆ©λμ μΌμΌν¬ μ μμ΅λλ€. μ΄ μ΅μ μ μ μ€νκ² κ·Έλ¦¬κ³ νμν λλ§ μ¬μ©νμΈμ.
- λ΄λΆ DNS: μΈλΆ DNS μλ²μ μμ‘΄νλ λμ λ컀μ λ΄λΆ DNSλ₯Ό μ¬μ©νμ¬ μ»¨ν μ΄λ μ΄λ¦μ νμΈνμΈμ. μ΄λ μ§μ° μκ°μ μ€μ΄κ³ λ€νΈμν¬ νμΈ μλλ₯Ό ν₯μμν¬ μ μμ΅λλ€.
- λ€νΈμν¬ μμ² μ΅μν: μ ν리μΌμ΄μ μ΄ λ§λλ λ€νΈμν¬ μμ² μλ₯Ό μ€μ΄μΈμ. μ΄λ μ¬λ¬ μμ²μ λ¨μΌ μμ²μΌλ‘ κ²°ν©νκ±°λ, λ°μ΄ν°λ₯Ό μΊμ±νκ±°λ, ν¨μ¨μ μΈ λ°μ΄ν° νμμ μ¬μ©νμ¬ μνν μ μμ΅λλ€.
6. λͺ¨λν°λ§ λ° νλ‘νμΌλ§
컨ν μ΄λνλ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ μ κΈ°μ μΌλ‘ λͺ¨λν°λ§νκ³ νλ‘νμΌλ§νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ΅μ νκ° ν¨κ³Όμ μΈμ§ νμΈνμΈμ.
- Docker Stats: `docker stats` λͺ λ Ήμ μ¬μ©νμ¬ CPU, λ©λͺ¨λ¦¬, λ€νΈμν¬ I/Oλ₯Ό ν¬ν¨ν 컨ν μ΄λμ 리μμ€ μ¬μ©λμ λͺ¨λν°λ§νμΈμ.
- νλ‘νμΌλ§ λꡬ: Node.js inspectorλ Chrome DevToolsμ κ°μ νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νλ‘νμΌλ§νκ³ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ.
- λ‘κΉ : ν¬κ΄μ μΈ λ‘κΉ μ ꡬννμ¬ μ ν리μΌμ΄μ λμμ μΆμ νκ³ μ μ¬μ μΈ λ¬Έμ λ₯Ό μλ³νμΈμ. μ€μ μ§μ€μ λ‘κΉ μμ€ν μ μ¬μ©νμ¬ λͺ¨λ 컨ν μ΄λμ λ‘κ·Έλ₯Ό μμ§νκ³ λΆμνμΈμ.
- μ€μ μ¬μ©μ λͺ¨λν°λ§(RUM): RUMμ ꡬννμ¬ μ€μ μ¬μ©μμ κ΄μ μμ μ ν리μΌμ΄μ μ±λ₯μ λͺ¨λν°λ§νμΈμ. μ΄λ κ°λ° νκ²½μμλ 보μ΄μ§ μλ μ±λ₯ λ¬Έμ λ₯Ό μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
μμ : λ컀λ₯Ό μ¬μ©ν 리μ‘νΈ κ°λ° νκ²½ μ΅μ ν
μ΄λ¬ν κΈ°λ²λ€μ λ컀λ₯Ό μ¬μ©ν 리μ‘νΈ κ°λ° νκ²½ μ΅μ νμ μ€μ μμλ₯Ό ν΅ν΄ μ€λͺ ν΄ λ³΄κ² μ΅λλ€.
- μ΄κΈ° μ€μ (λλ¦° μ±λ₯): λͺ¨λ νλ‘μ νΈ νμΌμ 볡μ¬νκ³ , μ’ μμ±μ μ€μΉνκ³ , κ°λ° μλ²λ₯Ό μμνλ κΈ°λ³Έμ μΈ Dockerfile. μ΄λ μ’ μ’ λ°μΈλ λ§μ΄νΈλ‘ μΈν λλ¦° λΉλ μκ°κ³Ό νμΌ μμ€ν μ±λ₯ λ¬Έμ λ‘ μ΄λ €μμ κ²ͺμ΅λλ€.
- μ΅μ νλ Dockerfile (λ λΉ λ₯Έ λΉλ, λ μμ μ΄λ―Έμ§): λΉλμ λ°νμ νκ²½μ λΆλ¦¬νκΈ° μν multi-stage builds ꡬν. κΈ°λ³Έ μ΄λ―Έμ§λ‘ `node:alpine` μ¬μ©. μ΅μ μ μΊμ±μ μν Dockerfile λͺ λ Ή μμ μ λ ¬. λΆνμν νμΌμ μ μΈνκΈ° μν `.dockerignore` μ¬μ©.
- Docker Compose κ΅¬μ± (리μμ€ ν λΉ, λ€μλ λ³Όλ₯¨): CPU λ° λ©λͺ¨λ¦¬μ λν 리μμ€ μ ν μ μ. ν₯μλ νμΌ μμ€ν μ±λ₯μ μν΄ λ°μΈλ λ§μ΄νΈμμ λ€μλ λ³Όλ₯¨μΌλ‘ μ ν. Docker Desktop μ¬μ© μ Mutagen ν΅ν© κ°λ₯μ±.
- Node.js μ΅μ ν (λ λΉ λ₯Έ κ°λ° μλ²): `NODE_ENV=development` μ€μ . API μλν¬μΈνΈ λ° κΈ°ν κ΅¬μ± λ§€κ°λ³μμ νκ²½ λ³μ νμ©. μλ² λΆνλ₯Ό μ€μ΄κΈ° μν μΊμ± μ λ΅ κ΅¬ν.
κ²°λ‘
컨ν μ΄λ λ΄μμ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½μ μ΅μ ννλ €λ©΄ λ€κ°μ μΈ μ κ·Ό λ°©μμ΄ νμν©λλ€. 리μμ€ ν λΉ, νμΌ μμ€ν μ±λ₯, μ΄λ―Έμ§ ν¬κΈ°, Node.js νΉμ μ΅μ ν λ° λ€νΈμν¬ κ΅¬μ±μ μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨ μ±λ₯κ³Ό ν¨μ¨μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μλ‘μ΄ λ³λͺ© νμμ μλ³νκ³ ν΄κ²°νκΈ° μν΄ νκ²½μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ νλ‘νμΌλ§νλ κ²μ μμ§ λ§μΈμ. μ΄λ¬ν κΈ°λ²μ ꡬνν¨μΌλ‘μ¨ νμ μν΄ λ λΉ λ₯΄κ³ , λ μμ μ μ΄λ©°, λ μΌκ΄λ κ°λ° κ²½νμ λ§λ€ μ μμΌλ©°, κΆκ·Ήμ μΌλ‘ λ λμ μμ°μ±κ³Ό λ λμ μννΈμ¨μ΄ νμ§λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ λλ‘ μνλ 컨ν μ΄λνλ JS κ°λ°μ ν° μ΄μ μ λλ€.
λν, λ³λ ¬ λΉλλ₯Ό μν BuildKit μ¬μ© λ° μΆκ°μ μΈ μ±λ₯ ν₯μμ μν λ체 컨ν μ΄λ λ°νμ νμκ³Ό κ°μ κ³ κΈ κΈ°λ²μ κ³ λ €ν΄ λ³΄μΈμ.